// #include <iostream>

// using namespace std;
// int n, k;
// const int N = 1e9;
// int arr[N];
// int res;
// void dfs(int x)
// {
//     if (x > k)
//     {
//         int sum = 0;
//         for (int i = 1; i <= k; i++)
//         {
//             sum += arr[i];
//         }
//         if (sum == n)
//         {
//             res++;
//         }
//         return;
//     }
//     for (int i = 1; i <= n; i++)
//     {
//         arr[x] = i;
//     }
// }
// int main()
// {
//     ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//     cin >> n >> k;
//     dfs(1);
//     cout << res << endl;
//     return 0;
// }

// #include <iostream>
// using namespace std;

// int n, k, res;

// void dfs(int x, int start, int sum)
// {
//     if (x == k)
//     {
//         int last = n - sum;
//         if (last >= start)
//         {
//             res++;
//         }
//         return;
//     }
//     int remaining = k - x;
//     int max_i = (n - sum) / (remaining + 1);
//     for (int i = start; i <= max_i; i++)
//     {
//         dfs(x + 1, i, sum + i);
//     }
// }

// int main()
// {
//     ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//     cin >> n >> k;
//     dfs(1, 1, 0);
//     cout << res << endl;
//     return 0;
// }


#include <iostream>

using namespace std;
int n, k, res ;
const int N = 23;
int arr[N];
void dfs(int x, int start, int now_sum)
{
    if (now_sum > n)
    {
        return;
    }
    if (x > k)
    {
        if (now_sum == n)
        {
            res++;
        }
        return;
    }
    for (int i = start; i <= n; i++)
    {
        arr[x] = i;
        dfs(x + 1, i, now_sum + i);
        arr[x] = 0;
    }
}

int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> n >> k;
    dfs(1, 1, 0);
    cout << res << endl;
    return 0;
}